TCP (Transmission Control Protocol) একটি নির্ভরযোগ্য কানেকশন-অরিয়েন্টেড প্রোটোকল, যা ক্লায়েন্ট এবং সার্ভারের মধ্যে ডেটা ট্রান্সমিশন এবং সংযোগ বন্ধের (Connection Termination) জন্য নির্দিষ্ট প্রক্রিয়া অনুসরণ করে। TCP ডেটা প্যাকেট ট্রান্সমিশন এবং সংযোগ টার্মিনেশনের মাধ্যমে সংযোগ স্থায়ী ও কার্যকর রাখতে সহায়ক।
Data Transmission (ডেটা আদান-প্রদান)
TCP-তে ডেটা ট্রান্সফার করার সময় ডেটা প্যাকেটগুলোকে সঠিকভাবে ট্রান্সমিট এবং রিসিভ করা হয়। TCP ডেটা ট্রান্সমিশনের সময় নিচের কয়েকটি ধাপ অনুসরণ করে:
ডেটা প্যাকেট বিভাজন (Segmentation):
- TCP বড় ডেটাকে ছোট ছোট অংশে (সেগমেন্টে) ভাগ করে, যাকে সেগমেন্টেশন বলা হয়। প্রতিটি সেগমেন্টে একটি Sequence Number এবং Checksum থাকে, যা ডেটা অর্ডার এবং ত্রুটি শনাক্ত করতে ব্যবহৃত হয়।
Sequence Number এবং Acknowledgment:
- প্রতিটি সেগমেন্টে একটি Sequence Number থাকে, যা সেগমেন্টের অর্ডার নির্দেশ করে। রিসিভার প্রতিটি সেগমেন্ট সঠিকভাবে পেলে, সে ACK (Acknowledgment) পাঠায়। এই ACK প্যাকেটটিতে Sequence Number এর ভিত্তিতে অনুমোদন থাকে, যা প্রেরককে জানায় যে ডেটা সঠিকভাবে পৌঁছেছে।
Error Detection এবং Retransmission:
- TCP প্রতিটি সেগমেন্টে Checksum ব্যবহার করে ত্রুটি চেক করে। যদি কোনো সেগমেন্টে ত্রুটি পাওয়া যায় বা সেটি হারিয়ে যায়, তাহলে রিসিভার ACK পাঠায় না, যা প্রেরককে জানায় যে সেগমেন্টটি পুনরায় পাঠাতে হবে।
Congestion Control এবং Flow Control:
- TCP ফ্লো কন্ট্রোল ব্যবহার করে নিশ্চিত করে যে রিসিভার তার ক্যাপাসিটি অনুযায়ী ডেটা গ্রহণ করতে সক্ষম। TCP Sliding Window মেকানিজম ব্যবহার করে রিসিভারের ক্ষমতা অনুযায়ী ডেটা পাঠায়।
- TCP কনজেশন কন্ট্রোল প্রক্রিয়ার মাধ্যমে নেটওয়ার্কের অবস্থা পর্যবেক্ষণ করে এবং যদি কনজেশন (যানজট) হয়, তাহলে ডেটা ট্রান্সমিশনের গতি কমিয়ে দেয়।
Data Transmission উদাহরণ
ধরা যাক, ক্লায়েন্ট এবং সার্ভারের মধ্যে ডেটা ট্রান্সমিশন হচ্ছে:
- ক্লায়েন্ট একটি ডেটা প্যাকেট পাঠায়, যার Sequence Number
1001
। - সার্ভার সেই প্যাকেট গ্রহণ করে এবং ACK পাঠায়, যেখানে ACK Number
1002
থাকে। - পরবর্তী প্যাকেট পাঠানোর পরেও একই প্রক্রিয়া অনুসরণ করা হয়। যদি কোনো প্যাকেট হারিয়ে যায়, তাহলে TCP সেই প্যাকেট পুনরায় পাঠায়।
Connection Termination (সংযোগ বন্ধ করা)
TCP একটি Four-Way Handshake পদ্ধতি ব্যবহার করে সংযোগ বন্ধ করে। এটি সংযোগ স্থাপন করার মতোই একটি প্রক্রিয়া, যা ক্লায়েন্ট এবং সার্ভার উভয়ের মধ্যে সম্মতিপূর্ণ সংযোগ সমাপ্তি নিশ্চিত করে।
Four-Way Handshake এর ধাপসমূহ
- FIN (Finish):
- ক্লায়েন্ট বা সার্ভার সংযোগ বন্ধ করতে চাইলে, সে একটি FIN প্যাকেট পাঠায়, যা অপর পক্ষকে জানায় যে সে আর ডেটা পাঠাতে চায় না।
- ACK (Acknowledgment):
- অপর পক্ষ FIN প্যাকেট গ্রহণ করার পর, একটি ACK প্যাকেট পাঠায়, যা জানায় যে সে FIN প্যাকেটটি গ্রহণ করেছে।
- FIN (Finish):
- এবার অপর পক্ষও একটি FIN প্যাকেট পাঠায়, যা নির্দেশ করে যে সে সংযোগ বন্ধ করতে প্রস্তুত।
- ACK (Acknowledgment):
- প্রথম পক্ষ সেই FIN প্যাকেট গ্রহণ করার পর একটি ACK পাঠায়, যা শেষ ACK হিসেবে কাজ করে এবং সংযোগ পুরোপুরি বন্ধ হয়ে যায়।
Four-Way Handshake উদাহরণ
ধরা যাক, ক্লায়েন্ট সংযোগ বন্ধ করতে চায়:
- ধাপ ১: ক্লায়েন্ট একটি FIN প্যাকেট পাঠায়।
- ধাপ ২: সার্ভার সেই FIN প্যাকেট গ্রহণ করে এবং একটি ACK পাঠায়।
- ধাপ ৩: সার্ভার এরপর একটি FIN প্যাকেট পাঠায়।
- ধাপ ৪: ক্লায়েন্ট সেই FIN প্যাকেট গ্রহণ করে এবং একটি ACK পাঠায়। এর মাধ্যমে সংযোগ সম্পূর্ণরূপে বন্ধ হয়ে যায়।
Connection Termination এর গুরুত্ব
- অর্ডারলি Termination: TCP একটি ধারাবাহিক এবং সঠিক প্রক্রিয়ার মাধ্যমে সংযোগ বন্ধ নিশ্চিত করে, যা উভয় পক্ষের সম্মতি প্রয়োজন।
- রিসোর্স মুক্ত করা: সংযোগ বন্ধ হলে TCP সংশ্লিষ্ট সকল রিসোর্স মুক্ত করে দেয়, যেমন Socket, ব্যাফার ইত্যাদি।
- ন্যায়সঙ্গত ফ্লো কন্ট্রোল: TCP নিশ্চিত করে যে সংযোগ বন্ধের আগে কোনো ডেটা হারিয়ে না যায়।
Connection Termination এর সীমাবদ্ধতা
- TIME_WAIT অবস্থা: সংযোগ বন্ধ হওয়ার পর TCP ক্লায়েন্ট বা সার্ভারকে একটি TIME_WAIT অবস্থায় রাখে, যাতে পুনরায় কোনো ভুল ACK প্যাকেট না আসে। এটি কিছু সময় নেয় এবং রিসোর্সের ওপর কিছুটা চাপ সৃষ্টি করতে পারে।
- আক্রমণ ঝুঁকি: ক্লায়েন্ট বা সার্ভারের FIN প্যাকেটগুলির ওপর ভিত্তি করে ডিডস (DDoS) বা SYN Flooding-এর মতো আক্রমণ ঘটতে পারে, যা TCP সংযোগকে ক্ষতিগ্রস্ত করতে পারে।